package com.fzkj.shejimoshi.Singleton;

/**
 * @DESCRIPTION: TODO 单例模式
 * @AUTHOR: AnotherOne
 * @DATE: 2021/8/12 11:26
 */
public class demo20210812 {

    public static void main(String[] args) {
        // 懒汉式
        Person instance = Person.getInstance();
        Person instance1 = Person.getInstance();
        System.out.println(instance + " == " + instance1);

        /// 饿汉式
        Person1 instance2 = Person1.getInstance();
        Person1 instance3 = Person1.getInstance();
        System.out.println(instance2 + " == " + instance3);
    }

}

class Person {
    /**
     * 第一步：构造方法私有化
     * 第二步：对外提供获取实例的方法
     * 又分为懒汉式和饿汉式，主要区别在初始化实例的阶段
     */
    private static Person instance;
    private Person() {}

    /**
     * 懒汉式
     * @return
     */
    public static synchronized Person getInstance() {
        if (instance == null){
            instance = new Person();
        }
        return instance;
    }
}

class Person1 {
    /**
     * 第一步：构造方法私有化
     * 第二步：对外提供获取实例的方法
     * 又分为懒汉式和饿汉式，主要区别在初始化实例的阶段
     * 懒汉式在获取的时候才会实例化
     * 饿汉式类加载的时候就会实例化
     */
    private static Person1 instance = new Person1();
    private Person1() {}

    /**
     * 饿汉式
     * @return
     */
    public static Person1 getInstance() {
        return instance;
    }
}
